package pers.zb.cloud.service.upms.service;




import pers.zb.cloud.service.upms.entity.SysRole;
import pers.zb.cloud.service.upms.entity.SysRoleOperateLog;
import pers.zb.cloud.service.upms.vo.*;

import java.util.List;

public interface RoleService extends BaseService<SysRole> {

    /**
     * 根据ID获取角色信息
     */
    SysRole getRoleById(Long roleId);

    /**
     * 分页获取客户端列表
     */
    Page<SysRole> getRoleListForPage(Page pageParam, SysRole roleParam);

    /**
     * 更新或者添加角色
     */
    void updateOrSave(int type, SysRole sysRole) throws Exception;

    /**
     * 批量删除角色
     */
    void deleteRole(Long[] roleIdArrs) throws Exception;

    /**
     * 分页获取角色操作日志列表
     *      form : 角色管理页面 - 下方的tab选项卡 - 操作日志
     */
    Page<SysRoleOperateLog> getRoleOperateLogForPage(Page pageParam, SysRoleOperateLog roleOperateLogParam);

    /**
     * 获取角色拥有的权限
     *      from : 角色管理 - 右侧的角色权限tree
     *
     * @param roleId 角色ID
     */
    List<RolePermissionVo> getRolePermissionTreeList(Long roleId);

    /**
     * 获取角色应用授权集合
     *      前端显示为 tree ， 同时每个节点前面显示 checkedbox 选项框。 已经授权的应用的checkedbox为选中状态，反之是未选中状态
     *
     * @param roleId 角色ID
     */
    List<RoleClientAuthorizeVo> getRoleClientAuthorizeList(Long roleId);

    /**
     * 为角色设置应用的访问权限
     * @param roleId 角色ID
     * @param clientIdArrString 应用的client_id集合，逗号分隔
     */
    void roleClientAuthorize(Long roleId, String[] clientIdArrString);

    /**
     获取角色拥有应用访问权限的应用列表
     *      from : 角色管理 -> 角色权限设置 -> 角色已授权系统
     *
     * @param roleId 角色ID
     */
    List<ClientVo> getRoleClientAuthorizeListTree(Long roleId);

    /**
     * 获取角色在应用中的权限
     *
     * @param roleId 角色ID
     * @param clientId 应用的client_id
     * @param permissionId 权限ID
     */
    List<RoleClientPermissionVo> getRoleClientPermissionList(Long roleId, String clientId, Long permissionId);

    /**
     * 为角色设置应用的功能操作权限
     *
     * @param clientId 应用client_id
     * @param roleId 角色ID
     * @param permissionIdArrString 权限ID
     */
    void settingRoleClientPermission(String clientId, Long roleId, Long[] permissionIdArrString);
}
